<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

  
  <title>COID</title>
</head>


<body style="color: rgb(80, 0, 0); background-color: rgb(255, 255, 240);" alink="#000099" link="#500000" vlink="#990099">

<div style="text-align: center;">
<div style="text-align: left;"></div>

<h3 style="text-align: left;">COID</h3>

<div style="text-align: left;"></div>

<div style="text-align: left;">
<div style="text-align: left;"></div>

<p><br>

COID framework server manages C++ classes whose declaration was
decorated in minimally obtrusive way by special keywords, that make it
possible to perform lookup, versioning and remote object access
services atop the ordinary C++ classes. The <a href="coidgen.html">coidgen</a>
tool generates client class and server side dispatch .cpp file required
for the versioning and remote access. The framework server uses
information registered in the dispatch file to feed the lookup and
versioning handlers. The server automatically estabilishes optimal
connection mode for client. If the client comes from the same process
where the required service runs or is to be created, the COID server
creates vtable that is used by the client to call methods in the same
way as it would call virtual methods in a ordinary C++ class. If the
client is remote, the client class is hooked through netstream
specialization of abstract <a href="../binstream.html">binstream</a>
class to the server-side dispatcher of the class, that was generated
automatically by the coidgen tool.<br>

</p>

<p><br>

COID framework server is implemented in dynamically loaded library <span style="font-weight: bold;">libcoidserver</span>. After reading its
configuration file&nbsp;<a href="../devconf.html">dev.conf</a> it loads
.dev libraries found in subdirectories of <span style="font-family: monospace;">./device</span> directory.<br>

</p>

<p>The .dev files are normal dynamically linked libraries that export
specific method used to get list of COID-extended classes, called <span style="font-style: italic;">services</span>, that the device (the .dev
file) implements, and that will be served by the COID framework server.
The device may contain several different services, usually chunked
together into the device because they tightly cooperate.<br>

</p>

<p>In addition to these external services, the libcoidserver library
looks for services contained in itself, and for services contained in
the current process. This means that you can link the libcoidserver
library with your executable and have served your COID-extended classes
automatically.<br>

</p>

<p>The libcoidserver library itself contains several core services used
internally throughout the framework, some of them can be connected
remotely or are used by other external services, such as the remote
console service. These services are used in direct mode within the
server, what means that there's just as much overhead in calling their
methods as it's in calling virtual C++ methods. These services are:<br>

</p>

<ul>

  <li><span style="font-weight: bold;">accountmgr</span> service -
manages accounts and provides services for authentication of clients
and getting access mode flags. These are used to build direct and
remote interfaces for particular access mode.</li>

  <li><span style="font-weight: bold;">logentmgr</span> service -
manages framework server log, allows for other services to retrieve log
entries using filters</li>

  <li><span style="font-weight: bold;">tunnelmgr</span> service -
provides means to tunnel the object communication through http</li>

  <li><span style="font-weight: bold;">cmdin</span> service - this is
not actually an ordinary service (yet), but it's a virtual class that
is used by the objects runing on the server. Through the cmdin
interface the objects request specific services from the framework
server. In the near future this service becomes an ordinary service
accessible in direct mode only, without any additional overhead
involved. You can read more about methods in the <a href="../cmdin.html">cmdin service here</a>.<br>

  </li>

</ul>

<p></p>

<br>

<p>see <a href="../coid.html">coid server documentation</a><br>

<br>

</p>

</div>

</div>

</body>
</html>
